#ifndef CVAGASMODEL_H
#define CVAGASMODEL_H

#include <QAbstractListModel>
#include <QDate>
#include <QStringList>
#include <QDebug>
#include <QFile>
#include <QDir>
#include <QSqlDatabase>
#include <QSqlQuery>
#include <QSqlError>
#include "cvagasitem.h"
#include "cutil.h"
#include "cconfiguracao.h"

class CVagasModel : public QAbstractListModel
{
    Q_OBJECT

    Q_PROPERTY(int quantidadeVagas READ getQuantidadeVagas NOTIFY quantidadeVagasChanged)

public:
    explicit CVagasModel(QObject *parent = 0);
    ~CVagasModel();

    int rowCount(const QModelIndex &parent = QModelIndex()) const;
    QVariant data(const QModelIndex &index = QModelIndex(), int role = Qt::DisplayRole) const;

    Q_INVOKABLE void Marcar(int codigoVaga);    
    Q_INVOKABLE void Desmarcar(int codigoVaga);      
    Q_INVOKABLE CVagasItem *LocalizarVaga(int codigoVaga);
    Q_INVOKABLE QStringList ListaEstados();
    Q_INVOKABLE QStringList ListaCidades();
    Q_INVOKABLE QStringList ListaEmpresas();

    bool getProcessando();
    QList<CVagasItem*> getVagas();

private:
    QList<CVagasItem*> _vagas;    

    int getQuantidadeVagas();
    void CarregarVagas();
    bool ArmazenarVaga(CVagasItem *v);

signals:
    void dataChanged(const QModelIndex &topLeft, const QModelIndex &bottomRight);
    void processandoChanged();
    void quantidadeVagasChanged();
    void resetarVagaContatadaSignal();

private slots:
    void handleDataChanged();

public slots:
    void vagaQuente(CVagasItem* v);
    void limparModelo();
    void posProcessamento();
    void desmarcarTodos();
    void vagaContatada(CVagasItem *v);
    void resetarVagaContatada();
};

inline QList<CVagasItem*> CVagasModel::getVagas() { return _vagas; }
inline int CVagasModel::getQuantidadeVagas() { return _vagas.count(); }

#endif // CVAGASMODEL_H
